package org.wzh.spring.di.demoj;

import javax.activation.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
import org.springframework.jndi.JndiObjectFactoryBean;

/**
 * Spring3.2开始,@Porfile注解可以在方法级别上时候使用,与@Bean注解一同使用.
 * 这样的话,可以将多个bean的声明放在同一个配置类中.
 * 尽管每个DataSource bean都被声明在一个profile中,并且只有当规定的profile激活时,相应的bean
 * 才会被创建,但是可能会有其他的bean并没有声明在一个给定的profile范围内.没有指定profile的bean
 * 始终都会被创建,与激活哪个profile没有关系.
 * @author MicroCat
 *
 */
@Configuration
public class DataSourceConfig {
	
	@Bean(destroyMethod="shutdown")
	@Profile("dev")
	public DataSource embeddedDatabaseBuilder() {
		return (DataSource) new EmbeddedDatabaseBuilder()
				.setType(EmbeddedDatabaseType.H2)
				.addScript("classpath:schema.sql")
				.addScript("classpath:test-data.sql")
				.build();
	}

	@Bean
	@Profile("prod")
	public DataSource jndiDataSource() {
		JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
		jndiObjectFactoryBean.setJndiName("jdbc/myDS");
		jndiObjectFactoryBean.setResourceRef(true);
		jndiObjectFactoryBean.setProxyInterface(javax.sql.DataSource.class);
		return (DataSource) jndiObjectFactoryBean.getObject();
	}
}
